package com.example.aerohub.pojo.param;

import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;

@Data
public class SearchParam {

	/**
	 * 请求ID，预订环节中的各个接口是唯一的，可通过本字段串联一个完整的预订流程，长度32位
	 */
	@NotEmpty(message = "身份标识不能为空")
	private String requestId;

	/**
	 * 行程类型：1 单程、2 往返，若传1或2，则代表本次搜索只需要这个类型的行程
	 */
	private int tripType;

	/**
	 * 航班类型：0 默认、1 直飞、2 中转，若传1或2，则代表本次搜索只需要这个类型的航班
	 */
	private int flightType;
	
	/**
	 * 成人乘客数量
	 */
	private int adultNumber;
	
	/**
	 * 儿童乘客数量
	 */
	private int childNumber;

	/**
	 * 婴儿乘客数量
	 */
	private int infantNumber;

	/**
	 * 航班日期,格式为 YYYYMMDD
	 */
	@Pattern(regexp = "^\\d{8}$", message = "去程时间不正确")
	private String fromDate;

	/**
	 * 回程日期,格式为 YYYYMMDD,tripType为2时retDate必传
	 */
	@Pattern(regexp = "^\\d{8}$", message = "返程时间不正确")
	private String retDate;

	/**
	 * 出发地城市，采用 ISO 3166 三字代码做为标准
	 */
	@Pattern(regexp = "^[A-Z]{3}$", message = "出发地不正确")
	private String fromCity;

	/**
	 * 目的地城市，采用 ISO 3166 三字代码做为标准
	 */
	@Pattern(regexp = "^[A-Z]{3}$", message = "到达地不正确")
	private String toCity;

	/**
	 * 航班公司代码，采用 IATA 二字代码做为标准，若传值代表本次搜索需要该航司的报价
	 */
	@Pattern(regexp = "^[A-Z]{2}$", message = "航班公司代码不正确")
	private String[] carrierCode;

	/**
	 * 航班号，如CA123，flightNumber 不为空，只返回目标航班报价数据，当有多个航班号组合的行程，需要遵循航段顺序
	 */
	private String[] flightNumber;

	/**
	 * 套餐类型，支持AirlineBundle和AerohubBundle两套餐类型，为空表示AerohubBundle
	 */
	private String[] product;

	/**
	 * 报价模式，为0代表最低价模式，只返回最低价格；为 1代表全部，返回所有套餐全部类型的价格，默认0
	 */
	private int priceMode;

	/**
	 * 服务要求标签，包含出票速度、能否拆单出票、是否允许更换票号出票、开票是否使用平台邮箱
	 */
	private ServiceTag serviceTag;

	/**
	 * 报价币种，为空时默认为USD，目前按照国际货币代码传入，如USD,EUR,JPY
	 */
	private String currency;

	/**
	 * 站点来源,每个站点的服务要求不同。如1：代表site1
	 */
	private int siteChannel;

	/**
	 * 包含1位小数，要求的返回时长（秒），超过此时长返回将不会展示。注意：此时长包含网络传输的时间
	 */
	private float timeout;

	/**
	 * 标识供应商查询返回报文是否需要压缩，true 压缩、false 不压缩；
	 * 供应商如需要压缩，只需在接收到请求后，将结果通过gzip压缩后返回给客户端并在响应头中增加Content-Encodin:gzip 表示响应数据已被压缩即可，不再需要根据该字段判断是否需要压缩
	 */
	private Boolean isCompressEncode;

}
